فرآیند و متدولوژی در توسعه ی نرم افزار Process & Methodology in Software Development بهمن زمانی bahmanzamani.com عضو هیأت علمی دانشکده مهندسی کامپیوتر دانشگاه اصفهان ارائه شده در نوزدهمین نمایشگاه اتوکام اصفهان آبان 94
مشتری چه میخواهد
Requirements Specification Project Management Requirements Analysis Design & Development Consultation سناریویی از یک پروژه ی نرم افزاری Documentation Installation Contract Maintenance Product=Software
مهندسی نرم افزار چیست مهندسی نرمافزار هم یک رشته تحصیلی است هم یک حرفه مهندسی هدف مهندسی نرمافزار آموزش پژوهش و اعمال روشها و فرآیندهای مهندسی در تولید نرمافزار است به منظور افزایش بهرهوری تیم توسعه... Productivity افزایش کیفیت محصول... Quality کاهش هزینه تولید... کاهش زمان تحویل... PQCT Cost Time to Market IEEE definition: Software Engineering: (1) The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. (2) The study of approaches as in (1).
اندازه نرم افزار معیار اندازه خط کد نرمافزار بزرگ 100 خط 1/000 خط 10/000 خط 100/000 خط 1/000/000 خط ویندوز 50 میلیون خط گوگل 2 میلیارد خط
چرا مهندسی نرم افزار نرم افزار همه جا هست کسب وکار شرکت ها وسایل زندگی امروزه تولید نرمافزار مستلزم کار گروهی )تیمی( است هر فرد ~ 100 خط کد در روز یک برنامهی متوسط ~ 500/000 خط تیم 20 نفره ~ یک سال ~ 5000 روز ~ 20 نفر سال برای کار تیمی نیاز به موارد مختلف هست مفهومسازی ارتباط هماهنگی همکوشی پس تولید نرم افزار باید به صورت مهندسی باشد
فعالیت های چرخه حیات نرم افزار زمان تحویل هزینه کیفیت بهره وری
فرآیند توسعه نرم افزار برای انجام هر کاری فرآیند الزم است مانند حل یک مسئله یا ساخت یک خانه فرآیند فعالیتهایی که جهت حل مسئله انجام میشوند را بیان میکند فرآیند حل هر مسئله فهم مسئله طراحی راهحل اجرای راهحل آزمایش راهحل فرآیند توسعه ی نرم افزار = چرخه حیات توسعه ی نرم افزار تحلیل طراحی پیاده سازی آزمون
مدل های فرآیند مدل فرآیند جریان فعالیت ها را نشان می دهد مدل های فرآیند معروف خطی تکراری تکاملی موازی شکل از کتاب پرسمن
فرآیند آبشاری
مزایا و مشکالت فرآیند آبشاری برنامهریزی و مدیریت آسان پروژه تخصیص کارها به تیم بر اساس تخصص مناسب برای برخی سیستمها که نیازهای مشخصی دارند دشواری در مواجهه با تغییر در نیازمندیها طوالنی شدن زمان توسعه باخورد دیر هنگام توسط مشتری مشاهده دیرهنگام نتایج و بازگشت سرمایه
تضمین کیفیت نرم افزار
مدیریت پروژه نرم افزار تخمین تالش برنامهریزی و زمانبندی پروژه مدیریت ریسک سرپرستی پروژه مدیریت پیکربندی نرم افزار
چالش های توسعه ی سیستم چالش های پروژه برنامه ریزی برای یک پروژه ی طوالنی نحوه تقسیم کار بین افراد و یکپارچه سازی نتایج نحوه همکاری و تعامل افراد تیم چالش های محصول اطمینان از برآورده شدن نیازها چگونگی برخورد با تغییرات در نیازها چگونگی مدیریت تغییرات چگونگی طراحی سیستم متشکل از چند زیرسیستم پس نیاز به روش مهندسی برای غلبه بر این چالشها هست لذا نیاز به فرآیند و متدولوژی هست
مسائل خوش رفتار و بدرفتار خوش رفتار بد رفتار میتوان بهطور کامل آنها را مشخص کرد مسئله و راه حل قابل تفکیک هستند ساختار مشخصی ندارند مسئله و راه حل را نمی توان تفکیک کرد قانون توقف ندارند همواره میتوان حل را بهتر کرد قانون توقف دارند میتوان درست یا غلط بودن راهحل را تعیین کرد در هر قدم از حل مسئله تعداد متناهی راه حل وجود دارد راهحلی که درست باشد مادامالعمر درست میماند راهحل را میتوان برای مسائل مشابه بهکار برد فرآیند حل مسئله یک فرآیند علمی است اگر مسئله حل نشد میتوان دوباره سعی کرد راه حل درست یا غلط ندارند بلکه خوب یا بد دارند در هر قدم از حل مسئله بینهایت راه حل وجود دارد راه حل نیاز به آزمایش مداوم دارد هر مسئله بدرفتاری یکتا است فرآیند حل مسئله یک کار سیاست مدارانه است توسعه ی نرم افزار یک مسئله بدرفتار است حل کننده حق اشتباه ندارد چون منجر به بحران می شود
برخی مسائل خوش رفتار Chess playing Math problems Operations research Many computer science problems Query optimization Compiler construction Operating systems AI problems Why are these tame problems?
برخی مسائل بدرفتار Urban planning Policy making Economic reforms Why are these wicked problems? Application software development
فرآیند و متدولوژی توسعه ی نرم افزار عالوه بر فرآیند نیازمندی یک متدولوژی است فرآیند فعالیت ها یا کارهایی که باید برای ساختن یک سیستم نرم افزاری انجام شوند را تعریف می کند. متدولوژی گامها یا چگونگی انجام فعالیتهای فرآیند نرمافزار را تعریف میکند. متدولوژی پیادهسازی یک فرآیند است. به عبارت دیگر متدولوژی پیاده سازی یک فرآیند است.
فرآیند و متدولوژی فرآیند چارچوبی برای فعالیتهای مراحل مشخص میکند متدولوژی پیادهسازی عینی فعالیتهای فرآیند است»چگونه«را مشخص میکند»چه«را مشخص میکند قالب و نحوه نمایش مصنوعات را مشخص میکند کاری به قالب مصنوعات ندارد مستقل از نگرش است هر مرحله می تواند توسط متدولوژی های مختلف انجام شود مثالها: فرآیند آبشاری فرآیند تکاملی فرآیند حلزونی فرآیند نمونهسازی فرآیند یکنواخت فرآیندهای چابک وابسته به نگرش است برای هر قدم روالها روشها و راهنماییهایی دارد مثال ها: SSADM OMT Scrum DSDM XP
بیانیه چابکی Manifesto for Agile Software Development We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan That is, while there is value in the items on the right, we value the items on the left more. Kent Beck - Mike Beedle - Arie van Bennekum - Alistair Cockburn - Ward Cunningham - Martin Fowler - James Grenning - Jim Highsmith - Andrew Hunt - Ron Jeffries - Jon Kern - Brian Marick - Robert C. Martin - Steve Mellor - Ken Schwaber - Jeff Sutherland - Dave Thomas
متدولوژی چابک یکنواخت
جمع بندی برای هر پروژه داشتن فرآیند و متدولوژی الزامی است. هیچ متدولوژیی حل ال همه مشکالت نیست )There is no silver bullet!( هیچ متدولوژیی وجود ندارد که برای هر نوع پروژهای ایدهآل باشد ) ONE SIZE FITS ALL is wrong!(
معرفی کتاب
معرفی کتاب کتاب»مهندسی نرمافزار شئگرا یک متدولوژی چابک یکنواخت«انتشارات دانشگاه اصفهان )در دست چاپ( نسخه اولیه قابل دریافت از وبگاه سخنران bahmanzamani.com
با تشکر